package com.xijia;


/**
  * 单列模式(懒汉式 + 双重检验锁)
  * @author wangsong
  * @mail  1720696548@qq.com
  * @date  2020/9/5 0005 10:06
  * @version 1.0.0
  */
public class Singleton03 {
    private static Singleton03 singleton03;

    private Singleton03() {
    }

    /**
     * 双重检验锁初始化 singleton03
     * 无缺陷
     * ----  修复案例2的 获取数据需要排队的问题，获取数据直接获取，
     * ----- 如果遇到多个线程同时进入 if ，加锁排队，第一个进入的线程初始化了对象，下一个排队的人进入后判断发现对象已经初始化了，就不重新初始化了
     * @return
     */
    public static Singleton03 getInstance() {
        // 上锁（创建该对象） 第一次判断
        if (singleton03 == null) {
            synchronized (Singleton03.class) {
                //第二次判断
                if (singleton03 == null) {
                    singleton03 = new Singleton03();
                }
            }
        }
        return singleton03;
    }


    public static void main(String[] args) {
        Singleton03 instance1= Singleton03.getInstance();
        Singleton03 instance2= Singleton03.getInstance();
        System.out.println(instance1==instance2);
    }
}
